package com.code.commons.enums;

/**
 * API统一返回状态码枚举
 *
 * @author tangyifei
 */
public enum ResultCode {

    /* 成功状态码 */
    SUCCESS(1, "成功"),
    REQUEST_IS_TOO_HIGH(2, "请求太频繁"),
    PROD_METHOD_NO_AUTH_CALL(3, "没有权限调用线上的相关方法"),

    /* 参数错误：10001-19999 */
    PARAM_IS_INVALID(10001, "参数无效"),
    PARAM_IS_BLANK(10002, "参数为空"),
    PARAM_TYPE_BIND_ERROR(10003, "参数类型错误"),
    PARAM_NOT_COMPLETE(10004, "参数缺失"),
    API_VERSION_TOO_LOW(10005, "api版本号太低"),
    APP_VERSION_TOO_LOW(10006, "app版本号太低"),

    /* 用户错误：20001-29999*/
    USER_NOT_LOGGED_IN(20001, "用户未登录"),
    USER_LOGIN_ERROR(20002, "账号不存在或密码错误"),
    USER_ACCOUNT_FORBIDDEN(20003, "账号已被禁用"),
    USER_NOT_EXIST(20004, "用户不存在"),
    USER_HAS_EXISTED(20005, "用户已存在"),
    LOGIN_CREDENTIAL_EXISTED(20006, "凭证已存在"),
    USER_PHONE_EXISTED(20007, "手机号已存在"),
    USER_EMAIL_EXISTED(20008, "邮箱已存在"),
    AUTH_CODE_ERROR(20009, "验证码不正确"),
    USER_EXISTED(20010, "用户已注册"),
    USER_LOGIN_CREDENTIAL_IS_NOT_NULL(20011, "用户登录凭证不能为空"),
    USER_IS_NOT_EXIST(20012, "用户不存在，请先注册"),
    USER_IS_DISABLED(20013, "用户已经被冻结"),
    USER_PWD_ERROR(20014, "密码不正确"),
    USER_OLD_PWD_ERROR(20015, "旧密码不正确"),
    USER_PHONE_FORMAT_ERROR(20016, "手机号码格式错误"),
    USER_SELECT_AVATAR_TO_UPLOAD(20017, "请选择一个头像进行上传"),
    USER_AVATAR_UPLOAD_ERROR(20018, "头像上传失败"),
    USER_ID_IS_NOT_NULL(20019, "用户主键不能为空"),
    USER_OLD_TRAN_PWD_ERROR(20020, "旧交易密码不正确"),
    USER_OLD_TRAN_PWD_IS_NOT_NULL(20021, "旧交易密码不能为空"),
    USER_COIN_BALANCE_VERSION_IS_NOT_NULL(20022, "用户相关币种余额版本号不能为空"),
    USER_OLD_PHONE_IS_NOT_RIGHT(20023, "用户修改的旧手机号码不匹配"),
    USER_AREA_NO_IS_NOT_NULL(20024, "区号不能为空"),
    USER_AUTH_CODE_IS_NOT_NULL(20025, "验证码不能为空"),
    USER_TRAN_PWD_ERROR(20026, "交易密码不正确"),
    USER_LOGIN_CRE_IS_NOT_NULL(20027, "用户登陆凭证不能为空，可能用户还没有注册"),
    USER_COIN_BALANCE_IS_NOT_NULL(20028, "用户钱包余额信息不能为空，可能用户还没有注册"),
    RECOMMEND_IS_NOT_REGISTER(20029, "推荐人还没有注册，不能推荐别人"),
    CANNOT_RECOMMEND_OWN(20030, "不能自己推荐自己"),
    VERSION_IS_NOT_NULL(20031, "相关的版本号不能为空"),
    CERTIFICATION_IS_AUTH(20032, "此证件已被认证"),
    USER_IS_AUTH(20033, "用户已经实名认证"),
    USER_IS_NOT_AUTH(20034, "用户没有实名认证"),
    BASE_AUTH_IS_NOT_PASS(20035, "基础认证未认证通过，不能进行高级认证"),
    ID_NUMBER_IS_ERROR(20036, "不是正确的身份证号码"),
    DEFAULT_USER_NOT_EXIST(20037, "系统主账户未指定"),
    DEFAULT_USER_FUNCTION_LIMIT(20038, "系统主账户不支持充提"),
    RECOMMEND_USER_IS_NOT_NULL(20039, "推荐人不能为空"),
    AUTH_CODE_EXPIRED(20040, "验证码已失效"),

    /* 业务错误：30001-39999 */
    SPECIFIED_QUESTIONED_USER_NOT_EXIST(30001, "业务错误"),

    /* 系统错误：40001-49999 */
    SYSTEM_INNER_ERROR(40001, "系统繁忙，请稍后重试"),

    /* 数据错误：50001-599999 */
    RESULE_DATA_NONE(50001, "数据未找到"),
    DATA_IS_WRONG(50002, "数据有误"),
    DATA_ALREADY_EXISTED(50003, "数据已存在"),

    /* 接口错误：60001-69999 */
    INTERFACE_INNER_INVOKE_ERROR(60001, "内部系统接口调用异常"),
    INTERFACE_OUTTER_INVOKE_ERROR(60002, "外部系统接口调用异常"),
    INTERFACE_FORBID_VISIT(60003, "该接口禁止访问"),
    INTERFACE_ADDRESS_INVALID(60004, "接口地址无效"),
    INTERFACE_REQUEST_TIMEOUT(60005, "接口请求超时"),
    INTERFACE_EXCEED_LOAD(60006, "接口负载过高"),

    /* 权限错误：70001-79999 */
    PERMISSION_NO_ACCESS(70001, "无访问权限"),
    RESOURCE_EXISTED(70002, "资源已存在"),
    RESOURCE_NOT_EXISTED(70003, "资源不存在"),

    /* AZPlan错误：80001-89999 */
    GET_COIN_ADDRESS_ERROR(80001, "调用数字货币管理平台获取相关的币种地址发生错误"),
    VERIFY_COIN_ADDRESS_ERROR(80002, "调用数字货币管理平台验证相关的币种地址发生错误"),
    VERIFY_COIN_ADDRESS_FAILURE(80003, "币种地址校验失败"),
    ONE_CHANNEL_ERROR(80004, "入金通道1入金错误，请仔细查看"),
    USER_BALANCE_ERROR(80005, "用户余额不足"),
    USER_CANNOT_ENTRY_MONEY(80006, "前一次入金额度还没有释放完，不能再次入金"),
    USER_TOTAL_INCOME_NOT_ENOUGH(80007, "用户用于兑换的USD总收益不足"),
    USER_EXCHANGE_RATIO_SET_ERROR(80008, "兑换比例设置有误"),
    GET_COIN_BALANCE_ERROR(80009, "调用数字货币管理平台获取相关的币种余额发生错误"),
    GET_DEPOSIT_LIST_ERROR(80010, "调用数字货币管理平台获取相关的币种充值交易列表发生错误"),
    GET_WITHDRAW_LIST_ERROR(80011, "调用数字货币管理平台获取相关的币种提币交易列表发生错误"),
    WITHDRAW_IS_TOO_LOW(80012, "金额不能小于某一个币种的最小提款或者转账金额"),
    WITHDRAW_FEE_ERROR(80013, "提币手续费不正确"),
    EXCHANGE_AMOUNT_ERROR(80014, "兑换的数量不能为0"),
    TRANSFER_AMOUNT_ERROR(80015, "资金划转的数量不能小于等于0"),
    ENTRY_MONEY_ERROR(80016, "请重新进入AZ资产页面并重新入金"),
    WITHDRAW_IS_CHECKED(80017, "提币已经被审核成功"),
    DEPOSIT_IS_TOO_LOW(80018, "充值的数量不能小于0"),
    OWN_INNER_TRANSFER_IN_ERROR(80019, "自己不能够给自己转账"),

    /* 系统错误：90001-99999 */
    SYSTEM_PROTECT(90001, "系统维护中"),
    SUPER_ADMIN_ERROR(90002, "不是超级管理员，不能执行该操作"),
    ;

    private final Integer code;

    private final String message;

    ResultCode(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public Integer code() {
        return this.code;
    }

    public String message() {
        return this.message;
    }

    /**
     * 获取枚举中的状态信息
     *
     * @param name 枚举名称
     * @return 相关枚举项的枚举状态信息
     */
    public static String getMessage(String name) {
        for (ResultCode item : ResultCode.values()) {
            if (item.name().equals(name)) {
                return item.message;
            }
        }
        return name;
    }

    /**
     * 获取枚举中的返回状态码
     *
     * @param name 枚举名称
     * @return 相关枚举项的枚举返回状态码
     */
    public static Integer getCode(String name) {
        for (ResultCode item : ResultCode.values()) {
            if (item.name().equals(name)) {
                return item.code;
            }
        }
        return null;
    }

    @Override
    public String toString() {
        return this.name();
    }

//    /**
//     * 校验重复的code值
//     *
//     * @param args
//     */
//    static void main(String[] args) {
//        ResultCode[] apiResultCodes = ResultCode.values();
//        List<Integer> codeList = new ArrayList<>();
//        for (ResultCode apiResultCode : apiResultCodes) {
//            if (codeList.contains(apiResultCode.code)) {
//                System.out.println(apiResultCode.code);
//            } else {
//                codeList.add(apiResultCode.code());
//            }
//
//            System.out.println(apiResultCode.code() + " " + apiResultCode.message());
//        }
//    }
}
